package com.lw.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

/**
 * @author LW
 * @2020/9/30 19:41
 */

/**
 * 直接在属性上使用即可！也可以在set方式上使用！
 *使用Autowired 我们可以不用编写Set方法了，前提是你这个自动装配的属性在 IOC（Spring）容器中存在，且符合名字byname！
 * */
/**
 * 如果@Autowired自动装配的环境比较复杂，自动装配无法通过一个注解【@Autowired】完成的时候、
 * 我们可以使用@Qualifier(value="xxx")去配置@Autowired的使用，指定一个唯一的bean对象注入！
 */
public class People {
    //如果显示定义了Autowired的required属性为false，说明这个对象'可以'为null，否则不允许为空
    @Autowired(required = false)//即可以为空
    private Cat cat;
    @Autowired//通过byName实现
    @Qualifier(value = "dog")
    private Dog dog;
    private String name;

    /**
     * @Resource 和@ Autowired 的区别：
     *
     * 都是用来自动装配的，都可以放在属性字段上
     * @ Autowired 通过byType的方式实现，而且必须要求这个对象存在！ 【常用】
     * @ Resource 默认通过byname的方式实现，如果找不到名字，则通过byType实现！如果两个都找不到的情况下，就报错！ 【常用】
     * 执行顺序不同：@ Autowired 通过byType的方式实现。@ Resource 默认通过byname的方式实现。
     */
    @Override
    public String toString() {
        return "Pet{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }

    public Cat getCat() {
        return cat;
    }

    //使用@Autowired 可以不用编写set方法（前提是这个属性自动装配到IOC） 也可以在set方法上使用，
    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void shout(){
        System.out.println("喵~~~");
    }
}
